import { invoke } from '@tauri-apps/api/core';
import {tauriClient} from "@/utils/tauri/tauriClient.js";
import {getToken} from "@/utils/auth.js";
import {setAuthInfo} from "@/utils/jquery.js";
const loginConfig = JSON.parse(import.meta.env.VITE_APP_LOGIN_BIND);

// 确保命令处理函数存在
window.js_bridge_callback = (result) => {
    console.log('收到 JS 回调:', result);
    invoke('js_callback', { data: result })
        .then(() => console.log('Rust 命令调用成功'))
        .catch(error => console.error('Rust 命令调用失败:', error));
};

// 测试函数，用于验证桥接是否正常工作
window.testJsBridge = (val) => {
    console.log('测试 JS 桥接...');
    return { ...val }
};

// 测试函数,js调用rust代码
window.testJsCallRust = async () => {
    console.log('[JS] 测试 JS 调用 Rust 函数...');
    try {
        // JS 调用 Rust 命令并等待结果
        const result = await tauriClient.invoke('greet', { message: 'Hello from JS!' }, 5000);
        console.log('[JS] Rust 命令调用成功:', result);
        return result; // 返回结果给 Rust
    } catch (error) {
        console.error('[JS] Rust 命令调用失败:', error);
        throw error;
    }
};

window.getJsAuthInfo = async () => {
    console.log('[JS] 获取认证信息...');
    try {
        const token=getToken();
        const loginId = localStorage.getItem(loginConfig.loginBindHeader);
        const auth_info={"token":token,"token_id":loginId,"expires":0}
        console.log('[JS] 获取认证信息成功:', auth_info);
        return auth_info; // 返回结果给 Rust
    } catch (error) {
        console.error('[JS] 获取认证信息失败:', error);
        throw error;
    }
}

window.setJsAuthInfo = async (auth_info) => {
    console.log('[JS] 设置认证信息...',auth_info);
    try {
        const {token,token_id,expires}=auth_info
        const cparam={"expires": 0};//new Date(expires+new Date().getTime())
        setAuthInfo(token,token_id,cparam,false)
        return auth_info; // 返回结果给 Rust
    } catch (error) {
        console.error('[JS] 设置认证信息失败:', error);
        throw error;
    }
};

export async function setRustAuthInfo(auth_info) {
    console.log('[Rust] 设置认证信息...');
    try {
        console.log('[Rust] 设置认证信息:', auth_info);
        const result = await tauriClient.invoke('js_set_auth_info', {
            token: auth_info.token,
            tokenId: auth_info.token_id,
            expires: auth_info.expires
        }, 3000);
        console.log('[Rust] 设置认证信息结果:', result);
    } catch (error) {
        console.error('[Rust] 设置认证信息失败:', error);
        throw error;
    }
}
async function jsInitFinish() {
    console.log('[JS] JS 初始化开始');
    try {
        await tauriClient.invoke('js_initialized', {}, 3000);
        console.log('[JS] JS 初始化完成');
    } catch (error) {
        console.error('[JS] JS 初始化失败:', error)
    }
}

jsInitFinish().then(() => {}).catch(error => console.error('[JS] JS 初始化失败:', error));